
console.log("方法的基本使用=======>")
// js 为弱类型语言,所以方法参数定义时,只用提供 形参名 即可
function printArg(a,b,c) {

    console.log("参数a:",a)
    console.log("参数b:",b)
    console.log("参数c:",c)
}

console.log("全参数传递-->")
printArg("字符串",100,false)
// 因为JS是弱类型语言,所以方法不存在重载规则,所以JS方法的调用无视参数
console.log("无参数传递-->")
// 当不传递参数时,对应的形参,如果没有特殊描述和说明,默认值为 undefined
printArg();
console.log("任意个数参数传递-->")
printArg(111)
console.log("任意个数参数传递-->")
// 虽然参数传递的数量可以随意控制,但实参和形参之间依然是以位置对应
printArg(111,2222)
console.log("任意个数参数传递-->")
printArg(111,2222,3333)
console.log("任意个数参数传递-->")
// 如果传递的实参数量超过了方法的形参列表,不会对多余的参数进行移除
//      因为所有方法参数 都会被默认记录在 方法内部的特殊变量  arguments 参数
//      arguments 参数是一个数组,以实参位置记录所有的参数
printArg(111,2222,3333,44444)

console.log("arguments参数测试")
// ==> 所有方法的实参会先存储在 方法内置的 arguments 变量中
//     再按照实参位置和形参一一对应
function printArg2(a,b) {
    console.log("形参a:",a)
    console.log("形参b:",b)
    console.log("参数:",arguments)
}
printArg2(100,200,300,"aaa",true)

// 方法定义时,不描述形参,方法使用规则却提示需要传递参数
/**
 * printArg3 用于执行 xxxx 功能 , 需要提供参数 a,b,c
 */
// function printArg3(){}

// JS可以简单且粗暴的认为所有方法都有返回值
//      方法中如果没有通过 return 关键字定义返回值,默认返回值是 undefined
//      方法中如果通过 return 关键字定义返回值,返回值为定义的值
function testReturn1(){
    console.log("testReturn1")
}
let resunt1 = testReturn1();
console.log(resunt1)

function testReturn2(){
    console.log("testReturn2")
    return "返回值"; // return 关键字也包含终止当前方法运行的功能
    console.log("testReturn2-之后的代码")
}
let resunt2 = testReturn2();
console.log(resunt2)
